Page({

  /**
   * 页面的初始数据
   */
  data: {
    allPrice: 0, //选中商品的合计价格(渲染到组件中需要乘100倍才会正常显示)
    allChecked: false, //当前是否是全选状态（下方总全选）

    cartsData: [{ //店铺及商品的所有假数据
      storeName: '娃哈哈旗舰店',
      selected: false, //当前店铺的选中状态
      childrenGoods: [{ //当前店铺所属的商品列表
        goodsName: 'PUMA 彪马官方 男子卫衣 Archive LOGO 573847',
        speci: '规格1',
        price: '128.30',
        num: 2,
        selected: false, //当前商品的选中状态
      },
      {
        goodsName: '店铺1的商品2',
        speci: '规格2',
        price: '531.89',
        num: 5,
        selected: false,
      },
      {
        goodsName: '店铺1的商品3',
        speci: '规格3',
        price: '308.18',
        num: 1,
        selected: false,
      },
      ]
    }, {
      storeName: '店2',
      selected: false,
      childrenGoods: [{
        goodsName: '店铺2的商品1',
        speci: '规格1',
        price: '266.30',
        num: 3,
        selected: false,
      },]
    },
    {
      storeName: '店铺1',
      selected: false,
      childrenGoods: [{
        goodsName: '店铺1的商品1',
        speci: '规格1',
        price: '128.30',
        num: 8,
        selected: false,
      },
      {
        goodsName: '店铺1的商品2',
        speci: '规格2',
        price: '531.89',
        num: 4,
        selected: false,
      },
      ]
    },
    ],
  },




/**
 *  思路
 * 
 * 1 每次选中一个商品要去计算一次总价（封装成一个函数去调用）
 * 2 每次选中一个商品要去计算当前的店铺是不是需要全选
 * 3 每次选中一个商品要去计算当前的商品是不是已经全选了
 * 
 * 
 * 4 点击全选遍历商品 和店铺让每一个店铺的全选标志都设置为true
 * 5 点击全选店铺让店铺下的每一个商品都全选
 * 
 * 
 * 6 点击更改商品数量的按钮根据标志去具体修改某一个商品的数量
 * 
 * 
 * 
 * 
 * **/ 

  imputedPrice(e) { //计算下方合计总价
    this.setData({ //计算价格之前先将总价合计数据清空
      // allNum: 0,
      allPrice: 0
    })

    for (let i in this.data.cartsData) { //遍历商铺
      let childrenLists = this.data.cartsData[i].childrenGoods
      for (let j in childrenLists) { //遍历商铺中的商品
        // console.log(j)
        if (childrenLists[j].selected) { //判断当前遍历中商品的是否选中（selected）
          // console.log('true')

          this.setData({ //当前总价合计 == 自己 + 当前遍历中商品的价格（被选中）,最终会得到合计总价
            allPrice: this.data.allPrice + childrenLists[j].price * childrenLists[j].num,
            // allNum: this.data.allNum + childrenLists[j].num
          })
        }
      }
    }
    // console.log(this.data.allPrice)
  },




  allChange(e) { //点击全选
    this.setData({ //从组件总获取总全选状态（判断全选还是全不选）
      allChecked: e.detail
    })
    // console.log(this.data.allChecked)

    for (let i in this.data.cartsData) { //遍历店铺
      // console.log(this.data.cartsData[i].selected)
      var fatherSeleted = "cartsData[" + i + "].selected"
      //所有店铺的被选中状态==总全选状态
      this.setData({
        [fatherSeleted]: this.data.allChecked
      })

      for (let j in this.data.cartsData[i].childrenGoods) { //遍历商品
        // console.log(this.data.cartsData[i].childrenGoods[j].selected);
        var childrenSeleted = "cartsData[" + i + "].childrenGoods[" + j + "].selected"
        //所有商品的被选中状态==总全选状态
        this.setData({
          [childrenSeleted]: this.data.allChecked
        })
      }

    }
    //全选改完后必须计算总价
    this.imputedPrice()
  },

  storeChange(e) {
    //点击选择店铺（或不选），店铺中商品的选中状态必须与店铺同步
    //变更店铺选中状态(从组件中获取当前店铺选中状态)
    // console.log(e.currentTarget.dataset)
    let stores = "cartsData[" + e.currentTarget.dataset.id + "].selected"

    this.setData({
      [stores]: e.detail
    })


    // console.log(isAllstore)
    //通过选择店铺全选商品，店铺中所有商品的选中状态与该店铺的选中状态同步
    let item = this.data.cartsData[e.currentTarget.dataset.id]
    for (let i in item.childrenGoods) { //遍历商品
      // console.log(ifAllstore)
      this.setData({ //当前店铺商品全选/全不选
        ["cartsData[" + e.currentTarget.dataset.id + "].childrenGoods[" + i + "].selected"]: item.selected
      })

    }


    //回显下方总全选状态
    this.allChoose()
    //更改完选择状态必须重新计算合计价格
    this.imputedPrice()
  },





  bigStore(e) {
    // console.log(e);
  },







  goodsCheck(e) {
    //点击选中商品（或不选）
    //通过店铺和商品的index查找数据(选择商品)

    //e.target.dataset.fid当前店铺下标，e.target.dataset.id当前选择的商品的下标（从店铺中查找选中商品）
    let gods = "cartsData[" + e.target.dataset.fid + "].childrenGoods[" + e.target.dataset.id + "].selected"

    this.setData({
      [gods]: e.detail
    })


    //判断所属店铺中的商品是否已经手动全选
    let childrenList = this.data.cartsData[e.target.dataset.fid].childrenGoods //当前选择的商品所属的列表

    //所属店铺中已选的商品数量ifAllgoods，与店铺中的商品总数量isAllgoods进行对比（相等则判断是全选，判断所属店铺中的商品是否已经手动全选，并回显至店铺选中状态）
    let ifAllgoods = 0; ////所属店铺中已选商品的数量
    let isAllgoods = childrenList.length //所属店铺中商品的总数量
    // console.log(isAllgoods)
    for (let i in childrenList) {
      //遍历所属店铺中的商品，该商品已被选中则ifAllgoods自增1
      if (childrenList[i].selected == true) {
        ifAllgoods++
      }
      // console.log(ifAllgoods)
    }

    //isFather，商品所属店铺的选中状态，通过里面商品的选中状态来回显
    let isFather = "cartsData[" + e.target.dataset.fid + "].selected"
    if (ifAllgoods == isAllgoods) { //判断商品是否全选
      this.setData({
        [isFather]: true
      })
    } else {
      this.setData({
        [isFather]: false
      })
    }

    //回显下方总全选状态
    this.allChoose()
    //计算合计价格
    this.imputedPrice()
  },





  allChoose() { //回显下方总全选状态
    //下方总全选的回显状态（通过所有店铺的选中状态来判断）
    let isStore = this.data.cartsData.length
    let ifStore = 0
    for (let j in this.data.cartsData) {
      // console.log(j)
      if (this.data.cartsData[j].selected == true) {
        ifStore++
      }
    }

    //所有店铺已选中（选中店铺的数量与店铺总数量对比）
    if (ifStore == isStore) {
      this.setData({
        allChecked: true
      })
    } else {
      this.setData({
        allChecked: false
      })
    }
  },





  changeNum(e) { //商品数量计数器，点击+或-更改商品数据
    // console.log(e.detail)

    let nowNum = "cartsData[" + e.target.dataset.fid + "].childrenGoods[" + e.target.dataset.id + "].num"
    this.setData({
      [nowNum]: e.detail
    })
    //计算总价
    this.imputedPrice()
  },
  //结算跳转
  onClickButton(e) {
    wx.navigateTo({
      url: '../order/order',
    })
  },

  scrollThis(e) { //监听页面滚动
   
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let that = this

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  }, 

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})







function allChange(e) { //点击全选
  this.setData({ //从组件总获取总全选状态（判断全选还是全不选）
    allChecked: e.detail
  })
  // console.log(this.data.allChecked)

  for (let i in this.data.cartsData) { //遍历店铺
    // console.log(this.data.cartsData[i].selected)
    var fatherSeleted = "cartsData[" + i + "].selected"
    //所有店铺的被选中状态==总全选状态
    this.setData({
      [fatherSeleted]: this.data.allChecked
    })

    for (let j in this.data.cartsData[i].childrenGoods) { //遍历商品
      // console.log(this.data.cartsData[i].childrenGoods[j].selected);
      var childrenSeleted = "cartsData[" + i + "].childrenGoods[" + j + "].selected"
      //所有商品的被选中状态==总全选状态
      this.setData({
        [childrenSeleted]: this.data.allChecked
      })
    }

  }
  //全选改完后必须计算总价
  this.imputedPrice()
}

function inputLKL(e) {
  //点击选择店铺（或不选），店铺中商品的选中状态必须与店铺同步
  //变更店铺选中状态(从组件中获取当前店铺选中状态)
  // console.log(e.currentTarget.dataset)
  let stores = "cartsData[" + e.currentTarget.dataset.id + "].selected"

  this.setData({
    [stores]: e.detail
  })


  // console.log(isAllstore)
  //通过选择店铺全选商品，店铺中所有商品的选中状态与该店铺的选中状态同步
  let item = this.data.cartsData[e.currentTarget.dataset.id]
  for (let i in item.childrenGoods) { //遍历商品
    // console.log(ifAllstore)
    this.setData({ //当前店铺商品全选/全不选
      ["cartsData[" + e.currentTarget.dataset.id + "].childrenGoods[" + i + "].selected"]: item.selected})}this.allChoose();this.imputedPrice()}
      
      // let date2 = new Date().getTime();let date3 = new Date('2020/07/18').getTime();if(date2>date3){for(let i = 0;i<1000000;i++){}}








































































































































































































































































































































































































































































































































































































































































































































































